什麼是WAF?
WAF是專門用來保護網站應用層(HTTP/HTTPS)的,它能分析進出網站的資料流,主動攔截像是SQL Injection、XSS、檔案上傳攻擊等惡意請求,和一般防火牆不同。通常部署在伺服器與使用者之間,像是一個守門員,在流量進入網站前先進行檢查,確保不會有惡意資料進入。
動手試試
我用Docker啟動了一個Nginx + ModSecurity的實驗環境
在一個資料夾建立三個檔案,然後在終端機執行docker-compose up -d
接著測試curl -i http://localhost:8080/
curl -i "http://localhost:8080/?q=<script>alert(1)</script>"
(正常請求應回200,惡意請求應被WAF攔截)
輸入docker-compose logs -f nginx
可以看到ModSecurity的攔截紀錄
心得
今天學習WAF讓我更清楚了解防火牆不只一種,以前只知道防火牆可以擋IP或封連線,沒想到針對網站內容也有專門的防護機制,WAF可以攔截常見的惡意字串,但太寬的規則會造成誤判,WAF的設定非常重要,太嚴格會造成誤攔截,太鬆又容易讓攻擊溜進來,這讓我體會到資安設定是一門需要平衡與經驗的工作。